
package persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.util.ArrayList;

import negocio.Administrativo;
import negocio.Alumno;
import negocio.Area;
import negocio.Contacto;
import negocio.Curso;
import negocio.Usuario;

public class ContactoDAO {
	private Connection c;
	private static ContactoDAO instancia;
	
	private ContactoDAO()
	{
		c = BDManager.getInstance().getConexion();
	}
	
	public static ContactoDAO  getInstance()
	{
		if(instancia == null)
			instancia = new ContactoDAO();
		return instancia;
	}
	
	
	//TODO: adaptar a la backup enviada por mail el Sabado 18_10 (modificaciones en tabla, de la BD, en tarea y contacto)
	//PORQUE falta atributo administrativo_fk
//	(tiene 12 COLUMNAS)
	public void guardar(Contacto contacto)
	{
		System.out.println("insert into contacto (DNI, nombre, apellido, telefono, mail, curso_fk, "
				+ "area_fk, observaciones, fecha, hora) VALUES ('"+contacto.getDNI()+"','"+ 
				contacto.getNombre()+"','"+contacto.getApellido()+"','"+
				contacto.getTelefono()+"','"+contacto.getMail()+"',"+contacto.getCursoInteres().getId()+","+
				contacto.getAreaInteres().getId()+",'"+contacto.getObservaciones()+"','"
				+contacto.getFecha().toString()+
				"','"+"08:00:00"+"')");
		String query = "insert into contacto (DNI, nombre, apellido, telefono, mail, curso_fk, "
				+ "area_fk, observaciones, fechacontacto, horacontacto, administrativo_fk) VALUES ('"+contacto.getDNI()+"','"+ 
				contacto.getNombre()+"','"+contacto.getApellido()+"','"+
				contacto.getTelefono()+"','"+contacto.getMail()+"',"+contacto.getCursoInteres().getId()+","+
				contacto.getAreaInteres().getId()+",'"+contacto.getObservaciones()+"','"
				+contacto.getFecha().toString()+
				"','08:00:00',"+ 1+")";
		try {
			Statement s = c.createStatement();
			s.execute(query);
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

	//TODO: adaptar a la backup enviada por mail el Sabado 18_10 (modificaciones en tabla, de la BD, en tarea y contacto)
//	(tiene 12 COLUMNAS)
	public ArrayList<Contacto> getAll()
	{
		String query = "SELECT * FROM contacto";
		Statement s;
		ResultSet rs;
		ArrayList<Contacto> res = new ArrayList<Contacto>();
		try {
			s = c.createStatement();
			rs = s.executeQuery(query);
			while(rs.next())
			{
				Curso curso= CursoDAO.getInstance().getCurso(rs.getInt(5));
				Area area= AreaDAO.getInstance().getArea(rs.getInt(6));
				Usuario usr=UsuarioDAO.getInstance().getUsuario(rs.getString(11));
				res.add(new Contacto(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), curso, area, 
						rs.getString(7), rs.getDate(8), rs.getString(10), usr));
			}
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
		return res;
	}
	
	//TODO: funciona ??, Gonzalo lo hizo
	//TODO: adaptar a la backup enviada por mail el Sabado 18_10 (modificaciones en tabla, de la BD, en tarea y contacto)
	//PORQUE falta atributo administrativo_fk (tiene 12 COLUMNAS)
	
	public Contacto getContacto(String DNI)
	{
		String query = "SELECT *FROM contacto alumno WHERE dni ='" + DNI+"'";
		Contacto res = null;
		try
		{
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery(query);
			rs.next();
			Curso curso= CursoDAO.getInstance().getCurso(rs.getInt(5));
			Area area= AreaDAO.getInstance().getArea(rs.getInt(6));
			Usuario usr=UsuarioDAO.getInstance().getUsuario(rs.getString(11));
			res = new Contacto(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), curso, area, 
					rs.getString(7), rs.getDate(8), rs.getString(10), usr);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		return res;
	}
	
	
	
//	<<al tener Cursada como atributo un objeto Instructor (Java)>> y <<al tener Cursada como fk un Instructor (BD)>>
	//cursadaDAO, getCursada
//  Instructor instructor = InstructorDAO.getInstance().getInstructor(rs.getString("instructor_fk"));  //se devuelve Objeto que cumple con la condicion que contiene en su argumento "getInstructor(...)"
	
//	(JAVA) Luego podre acceder al contenido de ese Objeto de la siguiente manera:
	
	//cursadaDAO, guardar()
//		cursada.getCurso().getId() 
	
	
	
	//TODO: hecho por david
	public ArrayList<Contacto> getAllContactoByAdmin(String dniAdm)
	{
		String query= String.format("SELECT * FROM contacto WHERE administrativo_fk= '%s' ", dniAdm);
		
		Statement s;
		ResultSet rs;
		ArrayList<Contacto> res = new ArrayList<Contacto>();
		try {
			s = c.createStatement();
			rs = s.executeQuery(query);
			while(rs.next())
			{
				//TODO: los numeros no siempre se colocan secuencialmente, pueden saltarse algunos a conveniencia
				Administrativo adm= AdministrativoDAO.getInstance().getAdministrativo(rs.getString("administrativo_fk") );  //BIEN
				Curso curso= CursoDAO.getInstance().getCurso(rs.getInt("curso_fk"));
				Area area= AreaDAO.getInstance().getArea(rs.getInt("area_fk"));
				Usuario usr=UsuarioDAO.getInstance().getUsuario(rs.getString(11));
				res.add( new Contacto(rs.getString("dni"), rs.getString("nombre"), rs.getString("apellido"), 
						rs.getString("mail"), curso, area, rs.getString("observaciones"), 
						rs.getDate("fechacontacto"), rs.getString("talefono"), usr)  );	
			}
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
		return res;
	}
	
	
	
//	public ArrayList<Contacto> getAllInteresByPersonaYCurso(String dniPer)
//	{
//		
//	}
	
	
	
	
}
